﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace ECommerce.DAO.SQL.Productos
{
    public static class Producto
    {
        //Select Methods Helpers
        public static ECommerce.Model.Productos.Producto[] GetProductos(string StoreProcedure, ECommerce.DAO.SQL.Parámetro[] Parámetros)
        {
            ECommerce.Model.Productos.Producto Producto = new ECommerce.Model.Productos.Producto();
            Type DynamicType = Producto.GetType();
            return ECommerce.DAO.SQL.Productos.Producto.GetProductosFromObjects(ECommerce.DAO.SQL.SqlHelper.Get(StoreProcedure,Parámetros, DynamicType));
        }
        public static ECommerce.Model.Productos.Producto[] GetProductosFromObjects(ECommerce.Model.Objeto[] Objetos)
        {
            List<ECommerce.Model.Productos.Producto> result = new List<ECommerce.Model.Productos.Producto>();
            ECommerce.Model.Productos.Producto Producto;
            foreach (ECommerce.Model.Objeto Objeto in Objetos)
            {
                Producto = new ECommerce.Model.Productos.Producto();
                Producto = (ECommerce.Model.Productos.Producto)Objeto;
                if (Producto != null)
                    if (Producto.Id != 0)
                        result.Add(Producto);
            }
            return result.ToArray();
        }
        //Select Methods
        /// <summary>
        /// Trae TODOS los productos
        /// </summary>
        /// <returns>ECommerce.Model.Productos.Producto[]</returns>
        public static ECommerce.Model.Productos.Producto[] GetProductos()
        {
            return ECommerce.DAO.SQL.Productos.Producto.GetProductos("GetProductos", null);
        }
        /// <summary>
        /// Trae todos los productos que tengan a la familia cuyo Id se pasa como parámetro.
        /// </summary>
        /// <param name="Id">Id de Familia</param>
        /// <returns></returns>
        public static ECommerce.Model.Productos.Producto[] GetProductosByIdFamilia(int Id)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@Id", System.Data.SqlDbType.BigInt, Id);
            Parámetros.Add(Parámetro);
            return ECommerce.DAO.SQL.Productos.Producto.GetProductos("GetProductosByIdFamilia", Parámetros.ToArray());
        }
        /// <summary>
        /// Trae un producto por el Id especificado.
        /// </summary>
        /// <param name="Id">Id de Producto</param>
        /// <returns>ECommerce.Model.Productos.Producto</returns>
        public static ECommerce.Model.Productos.Producto GetProductoById(Int32 Id)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@Id", System.Data.SqlDbType.BigInt, Id);
            Parámetros.Add(Parámetro);
            ECommerce.Model.Productos.Producto[] Productos = ECommerce.DAO.SQL.Productos.Producto.GetProductos("GetProductoById", Parámetros.ToArray());
            if (Productos != null)
                if (Productos.Length > 0)
                    return Productos[0];
            return null;
        }
        //Insert Methods
        public static int SetProducto(ECommerce.Model.Productos.Producto Producto)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@Id", System.Data.SqlDbType.BigInt, Producto.Id);
            Parámetros.Add(Parámetro);
            return ECommerce.DAO.SQL.SqlHelper.Insert("SetProducto", Parámetros.ToArray());
        }
        //Ejecute Methods
        public static void AddFamiliaToProduct(ECommerce.Model.Productos.Familia Familia, ECommerce.Model.Productos.Producto Producto)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@IdFamilia", System.Data.SqlDbType.BigInt, Familia.Id);
            Parámetros.Add(Parámetro);
            ECommerce.DAO.SQL.Parámetro Parámetro1 = new ECommerce.DAO.SQL.Parámetro("@IdProducto", System.Data.SqlDbType.BigInt, Producto.Id);
            Parámetros.Add(Parámetro1);
            ECommerce.DAO.SQL.SqlHelper.Execute("AddFamiliaToProduct", Parámetros.ToArray());
        }
        public static void DelFamiliaFromProduct(ECommerce.Model.Productos.Familia Familia, ECommerce.Model.Productos.Producto Producto)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@IdFamilia", System.Data.SqlDbType.BigInt, Familia.Id);
            Parámetros.Add(Parámetro);
            ECommerce.DAO.SQL.Parámetro Parámetro1 = new ECommerce.DAO.SQL.Parámetro("@IdProducto", System.Data.SqlDbType.BigInt, Producto.Id);
            Parámetros.Add(Parámetro1);
            ECommerce.DAO.SQL.SqlHelper.Execute("DelFamiliaFromProduct", Parámetros.ToArray());
        }
        public static void AddPackageToProducto(ECommerce.Model.Productos.Package Package, ECommerce.Model.Productos.Producto Producto)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@IdPackage", System.Data.SqlDbType.BigInt, Package.Id);
            Parámetros.Add(Parámetro);
            ECommerce.DAO.SQL.Parámetro Parámetro1 = new ECommerce.DAO.SQL.Parámetro("@IdProducto", System.Data.SqlDbType.BigInt, Producto.Id);
            Parámetros.Add(Parámetro1);
            ECommerce.DAO.SQL.SqlHelper.Execute("AddPackageToProducto", Parámetros.ToArray()); 
        }
        public static void DelPackageFromProduct(ECommerce.Model.Productos.Package Package, ECommerce.Model.Productos.Producto Producto)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@IdPackage", System.Data.SqlDbType.BigInt, Package.Id);
            Parámetros.Add(Parámetro);
            ECommerce.DAO.SQL.Parámetro Parámetro1 = new ECommerce.DAO.SQL.Parámetro("@IdProducto", System.Data.SqlDbType.BigInt, Producto.Id);
            Parámetros.Add(Parámetro1);
            ECommerce.DAO.SQL.SqlHelper.Execute("DelPackageFromProduct", Parámetros.ToArray());
        }

    }
}
